package com.zmn.plat.business.interfaces.product.tariff.item;

import com.zmn.plat.common.dto.product.item.ItemPriceDRO;
import com.zmn.plat.model.dto.service.ItemPriceCalDTO;
import com.zmn.plat.model.vo.product.tariff.item.BaseTariffGroupItemPriceVo;

/**
 * @author tanbiao
 * @description
 * @since 2020/3/19 17:49
 * @modifier
 **/
public interface ProductServiceItemPriceBService {

    /**
     * 功能描述 :渠道折扣
     *
     * @param channelId
     * @param bizType
     * @param priceType
     *            内部价系数还是销售价系数
     * @param priceType
     * @return java.lang.Float
     * @author tanbiao
     * @since 2020/3/28
     * @modifier
     */
    Float getChannelDiscount(Integer channelId, Integer bizType, Integer priceType);

    /**
     * 功能描述 :城市系数
     *
     * @param channelId
     * @param bizType
     * @param cityPriceType
     *            价格类型：1销售价 2内部结算价
     * @return java.lang.Float
     * @author tanbiao
     * @since 2020/3/28
     * @modifier
     */
    Float getCityRatio(Integer channelId, Integer cityId, Integer productId, Integer bizType, Integer cityPriceType);

    /**
     * 功能描述 :品牌系数
     *
     * @param productId
     * @param bizType
     * @param brandPriceType
     * @return java.lang.Float
     * @author tanbiao
     * @since 2020/3/28
     * @modifier
     */
    Float getBrandRatio(Integer channelId, Integer brandId, Integer productId, Integer bizType, Integer brandPriceType);

    /**
     * 功能描述 :计算总价
     *
     * @param priceVo
     * @param itemPriceDRO
     * @return java.lang.Float
     * @author tanbiao
     * @since 2020/8/12
     * @modifier
     */
    void getTotalPrice(BaseTariffGroupItemPriceVo priceVo, ItemPriceDRO itemPriceDRO);

    /**
     * 功能描述 :计算销售价价格和内部价，并设置价格相关的属性
     *
     * @param vo
     * @param calDTO
     * @return java.lang.Float
     * @author tanbiao
     * @since 2020/3/28
     * @modifier
     */
    void calPriceDetail(BaseTariffGroupItemPriceVo vo, ItemPriceCalDTO calDTO);

}
